package com.ruoyi.system.service;

import java.util.List;
import com.ruoyi.system.domain.JxExamRecord;

/**
 * 学员考试记录Service接口
 * 
 * @author ruoyi
 * @date 2025-01-27
 */
public interface IJxExamRecordService 
{
    /**
     * 查询学员考试记录
     * 
     * @param examId 学员考试记录主键
     * @return 学员考试记录
     */
    public JxExamRecord selectJxExamRecordByExamId(Long examId);

    /**
     * 查询学员考试记录列表
     * 
     * @param jxExamRecord 学员考试记录
     * @return 学员考试记录集合
     */
    public List<JxExamRecord> selectJxExamRecordList(JxExamRecord jxExamRecord);

    /**
     * 新增学员考试记录
     * 
     * @param jxExamRecord 学员考试记录
     * @return 结果
     */
    public int insertJxExamRecord(JxExamRecord jxExamRecord);

    /**
     * 修改学员考试记录
     * 
     * @param jxExamRecord 学员考试记录
     * @return 结果
     */
    public int updateJxExamRecord(JxExamRecord jxExamRecord);

    /**
     * 批量删除学员考试记录
     * 
     * @param examIds 需要删除的学员考试记录主键集合
     * @return 结果
     */
    public int deleteJxExamRecordByExamIds(Long[] examIds);

    /**
     * 删除学员考试记录信息
     * 
     * @param examId 学员考试记录主键
     * @return 结果
     */
    public int deleteJxExamRecordByExamId(Long examId);

    /**
     * 查询学员某科目的最大考试次数
     * 
     * @param studentId 学员ID
     * @param subjectId 科目ID
     * @return 最大考试次数
     */
    public Integer selectMaxAttemptNo(Long studentId, Long subjectId);

    /**
     * 查询学员某科目的考试记录
     * 
     * @param studentId 学员ID
     * @param subjectId 科目ID
     * @return 考试记录列表
     */
    public List<JxExamRecord> selectJxExamRecordByStudentAndSubject(Long studentId, Long subjectId);

    /**
     * 查询学员所有科目的考试记录
     * 
     * @param studentId 学员ID
     * @return 考试记录列表
     */
    public List<JxExamRecord> selectJxExamRecordByStudent(Long studentId);

    /**
     * 登记考试记录（包含业务规则）
     * 
     * @param jxExamRecord 考试记录
     * @return 结果
     */
    public int registerExamRecord(JxExamRecord jxExamRecord);

    /**
     * 检查学员是否可以参加某科目考试
     * 
     * @param studentId 学员ID
     * @param subjectId 科目ID
     * @return 是否可以考试
     */
    public boolean canTakeExam(Long studentId, Long subjectId);
}
